/**
 * 安卓白金英雄坛制作组 <br>
 * 文件名：GameEvent.java <br>
 * 创建时间：2013-5-27 下午5:40:49 <br>
 * 所属项目：GmudEX <br>
 *
 * @author 12548 <br>
 */
package lostland.gmud.exv2;

import com.google.gson.Gson;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.orhanobut.logger.Logger;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;

import lostland.general.network.GmudHttp;
import lostland.general.network.GmudRequestListener;
import lostland.general.network.GmudRestUrl;
import lostland.gmud.exv2.Gmud.PaymentStatus;
import lostland.gmud.exv2.battle.BattleScreen;
import lostland.gmud.exv2.battle.netbattle.ArenaMenuScreen;
import lostland.gmud.exv2.battle.netbattle.BattleInfo;
import lostland.gmud.exv2.battle.proc.holder.BossBattle;
import lostland.gmud.exv2.battle.proc.holder.Tournament;
import lostland.gmud.exv2.blgframework.BasicScreen;
import lostland.gmud.exv2.blgframework.CScreen;
import lostland.gmud.exv2.blgframework.IFileIO;
import lostland.gmud.exv2.blgframework.impl.BLGFileIO;
import lostland.gmud.exv2.community.CommunityLoginMenu;
import lostland.gmud.exv2.community.GmudUser;
import lostland.gmud.exv2.data.GameData.GameStory;
import lostland.gmud.exv2.data.Item;
import lostland.gmud.exv2.data.ItemTemplate;
import lostland.gmud.exv2.data.Npc;
import lostland.gmud.exv2.data.Room;
import lostland.gmud.exv2.data.Rune;
import lostland.gmud.exv2.data.SaveData;
import lostland.gmud.exv2.data.Skill;
import lostland.gmud.exv2.data.TalentDesc;
import lostland.gmud.exv2.expand.BegForPayMenuScreen;
import lostland.gmud.exv2.expand.ChestScreen;
import lostland.gmud.exv2.expand.EventScene;
import lostland.gmud.exv2.expand.GeneralMenuScreen;
import lostland.gmud.exv2.expand.minigame.DancingScreen;
import lostland.gmud.exv2.expand.minigame.Q2048Screen;
import lostland.gmud.exv2.js.JsCommon;
import lostland.gmud.exv2.ui.BlankScreen;
import lostland.gmud.exv2.ui.EventScreen;
import lostland.gmud.exv2.ui.NotificationScreen;
import lostland.gmud.exv2.ui.RansackScreen;
import lostland.gmud.exv2.ui.SignScreen;
import lostland.gmud.exv2.ui.SleepScreen;
import lostland.gmud.exv2.ui.TalkingScreen;
import lostland.gmud.exv2.ui.WateringScreen;
import lostland.gmud.exv2.ui.core.DoubiScreen;
import lostland.gmud.exv2.ui.core.YesNoScreen;

/**
 * 类名：GameEvent <br>
 * 说明：事件处理类
 *
 * @author 12548
 */
public class GameEvent {

	public static final int DRINK = 1;
	public static final int SIGN = 5;
	public static final int ROPE = 0;
	public static final int KAGAMI = 15;

	public static void SBsParty() {
		ArrayList<String> s = new ArrayList<>(3);
		s.add("报名参加（交10000金钱报名费）");
		s.add("观战（交5000金钱买门票）");

		new GeneralMenuScreen(s, "你来到了武林大会，请选择：") {

			@Override
			public void onClick(int i) {
				switch(i) {
					case 0: //报名
						if(Gmud.mc.gold < 10000) {
							new NotificationScreen("你的金钱不足！").replaceCurrent();
						} else {
							Gmud.mc.earnMoney(-10000);
							getGame().wulindahui = new Tournament();
							getGame().wulindahui.init(true);
							getGame().wulindahui.replaceCurrent();
						}
						break;
					case 1: //观战
						if(Gmud.mc.gold < 5000) {
							new NotificationScreen("你的金钱不足！").replaceCurrent();
						} else {
							getGame().wulindahui = new Tournament();
							getGame().wulindahui.init(false);
							getGame().wulindahui.replaceCurrent();
							Gmud.mc.earnMoney(-5000);
						}
						break;
				}
			}

			@Override
			public void onCancel() {
				getGame().popScreen();
			}
		}.pushToGame();
	}

	public static void callEvent(int eventid) {
		switch(eventid) {
			case ROPE:
				//麻绳 0
				if(!Gmud.mc.have(Item.ROPE_INDEX)) {
					new RansackScreen(Item.ROPE_INDEX).pushToGame();
				}
				break;
			case KAGAMI:
				//魔镜 15
				new NotificationScreen("你目前的声望值为：" + Gmud.mc.fame).pushToGame();
				new TalkingScreen("魔镜啊魔镜，告诉我，谁是世界上最漂亮的人？").pushToGame();
				break;
			case DRINK:
				//水井 1
				new WateringScreen().pushToGame();
				break;
			case SIGN:
				//公告栏 5
				new SignScreen().pushToGame();
				break;
			case 2:
			case 3:
			case 4:
				//老婆婆任务 2 3 4
				final int itmid = Room.SHUI_TONG - 2 + eventid;
				if(Game.getData().mpp != eventid) return;
				if(!Gmud.mc.equips(itmid)) return;

				int cost[] = {0, 0, 50, 60, 40};
				if(Gmud.mc.getSp() < cost[eventid]) {
					new TalkingScreen("婆婆啊！手都软了，我们老板都没你狠！").pushToGame();
					Game.getData().mpp = 0;
					Gmud.mc.unequip(itmid);
					Gmud.mc.drop(itmid, 1);
					return;
				}

				String s[] = {"", "", "", "",
						"挑水挑水我挑水\n倒水进缸水花飞", "一桶两桶三四桶\n反正不用交水费",
						"劈柴劈柴我劈柴\n抡起斧子劈起来", "保护树木讲环保\n婆婆没事别乱烧",
						"扫地扫地我扫地\n地上还有西瓜皮", "婆婆家中欠打扫\n尘土满天难呼吸"};

				Gmud.mc.setSp(Gmud.mc.getSp() - cost[eventid]);

				final ArrayList<String> a = new ArrayList<>();

				a.add(s[2 * eventid]);
				a.add(s[2 * eventid + 1]);

				a.add("费了好大力气，总算干完了");

				if(Math.random() * (Gmud.mc.getface() + 220) > 220) {
					int pot = (int) (Math.random() * 500 + 150);
					a.add("老婆婆对你的工作非常满意，你被奖励了：" + pot + "金钱，" + pot + "实战经验，" + pot + "潜能");
					Gmud.mc.setPotential(Gmud.mc.potential + pot);
					Gmud.mc.setExp(Gmud.mc.exp + pot);
					Gmud.mc.earnMoney(pot);
				} else {
					Gmud.mc.earnMoney(50);
					Gmud.mc.setExp(Gmud.mc.exp + 20);
					Gmud.mc.setPotential(Gmud.mc.potential + 10);
					a.add("你被奖励了：\n20实战经验 10潜能 50金钱");
				}

				Gmud.mc.unequip(itmid);
				Gmud.mc.drop(itmid, 1);

				Game.getData().mpp = 0;

				new EventScene() {

					@Override
					public ArrayList<String> getPages() {
						return a;
					}
				}.pushToGame();

//			new EventScreen(a,true).pushToGame();

				break;
			case 6:
				//钓鱼
				final ArrayList<String> b = new ArrayList<>();

				if(!Gmud.mc.have(73)) {
					b.add("看着池塘里的鱼，你摸了摸肚皮，心想：要是有个钓竿多好啊！");
				} else if(Gmud.mc.getSp() < 50) {
					b.add("现在日头这么毒，以你的体质，恐怕没钓到鱼就已经……");
				} else {
					b.add("你在土里刨了刨，抓了只小蚯蚓，穿在吊钩上，一挥手，钓线划出一道优美的弧线扎进了水里，你往地上一蹲，开始钓鱼。");
					Gmud.mc.setSp(Gmud.mc.getSp() - 50);
					if(Gmud.rand.nextBoolean()) {
						b.add("浮子猛然沉了下去，你手疾眼快，一提钓竿，有了！");
						if(Gmud.mc.have(76)) {
							if(Item.notNull(Gmud.mc.give(74))) {
								b.add("你把鱼放进鱼篓，心里了开了花，今天的零花钱有着落了！");
							} else {
								b.add("你把鱼从钩上摘下来，猛然想起：坏了，鱼篓装不下了。一分神，鱼一下子滑到了水里，到手的鱼跑了！");
							}
						} else {
							b.add("你把鱼从钩上摘下来，猛然想起：坏了，没带鱼篓。一分神，鱼一下子滑到了水里，到手的鱼跑了！");
						}
					} else {
						b.add("过了很久也没有鱼上钩，你一收钓竿，到树下乘凉去了。");
					}
				}

				new EventScene() {

					@Override
					public ArrayList<String> getPages() {
						return b;
					}
				}.pushToGame();

//			new EventScreen(b,false).pushToGame();
				break;

			case 7:
				//上吊

				if(Gmud.mc.have(Item.ROPE_INDEX)) {
					new YesNoScreen("如果你自杀，资料就删除了，请考虑清楚！") {

						@Override
						protected void onYes() {
							IFileIO f = Game.getInstance().getFileIO();
							if(Gmud.mc.drink <= 0) {
								new TalkingScreen("你饿得头昏眼花，没有力气系紧绳套，结果晃了两下就掉在了地上！好歹去喝两口水吧……").replaceCurrent();
								return;
							}
							while(!f.getPreferences().edit().putBoolean("newgame", true).commit()) {
								// retry
							}
							new BlankScreen().replaceCurrent();
						}

						@Override
						protected void onNo() {
							getGame().popScreen();
						}
					}.pushToGame();
				}
				new TalkingScreen("活着真没意思，真想找根绳子上吊自杀。").pushToGame();
				break;
			case 8:
				//山间盆地 菜花宝典
				if(Gmud.mc.sex == 0 && Gmud.mc.equips(40) && Gmud.mc.age <= 16 && Gmud.mc.fame < 128) {
					Gmud.mc.give(81);
					new TalkingScreen("发现菜花宝典").pushToGame();
				}

				break;
			case 9:
				//六芒星阵
				if(Gmud.mc.get_pile(Gmud.mc.findItem(Item.TRIANGLE_INDEX)) >= 6) {
					ArrayList<String> ts = new ArrayList<>();
					int t;
					if(Gmud.mc.fame >= 160) {
						t = 125;
						ts.add("东方求败：哈哈----------！没想到吧。");
						ts.add(Gmud.mc.name + "：难道神秘人是……");
						ts.add("东方求败：不错。十年前，自诩为名门正派的六大门派合力偷袭，把我关在这里……");
						ts.add(Gmud.mc.name + "：我会把你再次封印。");
						ts.add("东方求败：做梦吧，以你的实力，十万年还早！");
					} else if(Game.getData().death_note.contains(132)) {
						t = 132;
						Game.getData().death_note.remove((Integer) 132);
						Gmud.getNpc(132).name = "丘比";
						Gmud.getNpc(132).look(4, 25);
						Gmud.getNpc(132).setExp(Gmud.mc.exp * 3);
						Gmud.getNpc(132).setZoomSkill(Gmud.getNpc(132).skills, 1.3);
						Gmud.getNpc(132).refresh();
						ts.add("丘比：嘿嘿，真是不错，竟然能找得到我。");
						ts.add(Gmud.mc.name + "：你不就是宇文天启正在寻找的那个……");
						ts.add("丘比：不错。本来宇文是和我签订契约的魔法少女，但她私开时空裂缝，来到这里后，就将我用魔法封印了。");
						ts.add(Gmud.mc.name + "：那时空转换装置是怎么一回事……");
						ts.add("丘比：时空转换装置也可以用来开启时空裂缝，这是我用来考验你的。");
						ts.add(Gmud.mc.name + "：也就是说，打败了你，我就能回到原来世界了？");
						ts.add("丘比：没错。可是……");
						ts.add(Gmud.mc.name + "：接招吧！");
					} else if(Gmud.mc.fame < 128 && Game.getData().death_note.contains(11)) {
						t = 126;
						ts.add("道德和尚：苦海无边，回头是岸。");
						ts.add(Gmud.mc.name + "：不可能！难道你没有死？");
						ts.add("道德和尚：施主罪孽深重，老衲是不会让你回到原来的世界再次危害天下的。");
					} else {
						t = 124;
						ts.add("我是谁:在每个故事的结尾,通常都会有一个最终BOSS。遇上我，是你的不幸，要怪就怪那个幕后的导演吧！");
					}

					//				Gmud.bs.enemyid = t;
					//				Gmud.bs.setStatus(new BattleStart(false));
					//				Gmud.bs.eob = false;

					BattleScreen.battle(-1, t, new BossBattle());
					BattleScreen.getInstance().bossid = t;
					EventScreen.ts = BattleScreen.getInstance();
					new EventScreen(ts, false).pushToGame();
				}

				break;
			case 10:
				//南郊高山
				//			boolean ad = false;
				//			for(int i : Tournament.PLAYERS)
				//				if(GmudGame.getData().death_note.contains(i))
				//					ad = true;
				//
				//			if(!(GmudGame.getData().tournament_finished || ad))
				//				GmudGame.getInstance().setScreen(new YesNoScreen(GmudGame.getInstance(),
				//						"一座高山，原本山顶应是终年积雪，可今天貌似在举行武林大会？想上去一看究竟吗？"){
				//
				//					@Override
				//					protected void onYes() {
				//						SBsParty();
				//					}
				//
				//					@Override
				//					protected void onNo() {
				//						game.setParentScreen();
				//					}});
				//			else
				new YesNoScreen("一座高山，山顶终年积雪，相传山顶有神仙居住，想上去看看吗？") {

					@Override
					protected void onYes() {
						if(Gmud.mc.age % 4 == 1 && Gmud.rand.nextBoolean()) {
							new Q2048Screen().replaceCurrent();
						} else {
							new DancingScreen().replaceCurrent();
						}
					}

					@Override
					protected void onNo() {
						getGame().popScreen();
					}
				}.pushToGame();

				break;
			case 11:
				//北洞窟
				break;
			case 12:
				//南洞窟

				break;

			case 13:
				//酗酒
				if(Gmud.mc.have(78)) {
					new TalkingScreen("zzz,好困啊~").pushToGame();
					new SleepScreen(3f).pushToGame();
					Gmud.mc.drop(78, 1);
					BasicScreen.timeFlow(GameConstants.SECONDS_PER_DAY * 90); //三个月
				}
				break;

			case 14:
				//武馆切磋
			{
				if(GmudUser.getInstance() == null) {
					new CommunityLoginMenu("要使用切磋功能，你必须先登录社区。").pushToGame();

				} else {

					ArrayList<String> options = new ArrayList<>();

					options.add("与玩家切磋");
					options.add("在线对战");

					new GeneralMenuScreen(options, "请选择项目：") {

						@Override
						public void onCancel() {
							removeFromGame();
						}

						@SuppressWarnings("unused")
						@Override
						public void onClick(int i) {
							if(i == 0) {
								getGame().getHandler().obtainMessage(GameMessageHandler.MSG_QIECUO).sendToTarget();
							} else if(i == 1) {

								if(!((Gmud.paymentData.paymentStatus == PaymentStatus.PAID) || Gmud.DEBUG)) {
									new NotificationScreen("此功能暂未开放！").replaceCurrent();
								}

								String svid = GmudUser.getInstance().getSaveObjectID();
								if(svid.trim().length() == 0) {
									new YesNoScreen("你必须先有云存档才能联机对战！现在要保存吗？") {

										@Override
										protected void onYes() {
											removeFromGame();
											getGame().getHandler().obtainMessage(GameMessageHandler.MSG_CLOUDSAVE).sendToTarget();
										}

										@Override
										protected void onNo() {
											removeFromGame();

										}
									}.pushToGame();
								} else {
									new YesNoScreen("使用联机对战将更新您的云存档，确定吗？") {

										@Override
										protected void onYes() {
											removeFromGame();

											RequestParams rp = new RequestParams();

											new GmudHttp().postLocked(GmudRestUrl.GetRooms, rp, new GmudRequestListener() {

												@Override
												public void onSucc(ResponseInfo<String> info) {
													try {
														JSONObject jo = new JSONObject(info.result);
														Logger.i(jo.toString(2));

														String state = jo.getString(GmudHttp.KEY_STATE);

														if(state.equals(GmudHttp.STATE_ERROR)) {
															new NotificationScreen("获取擂台信息失败！").pushToGame();
														} else if(state.equals(GmudHttp.STATE_EMPTY)) {
															new NotificationScreen("当前无可用擂台！").pushToGame();
														} else if(state.equals(GmudHttp.STATE_OK)) {
															JSONArray rooms = jo.getJSONArray("rooms");
															if(rooms.length() == 0) {
																new NotificationScreen("当前无可用擂台！").pushToGame();
															} else {
																BattleInfo[] arenas = new Gson().fromJson(rooms.toString(), BattleInfo[].class);

																new ArenaMenuScreen(arenas).replaceCurrent();
															}
														} else {
															new NotificationScreen("未知错误！").pushToGame();
														}

													} catch(JSONException e) {
														new NotificationScreen("获取擂台信息失败！").pushToGame();
//				                                    e.printStackTrace();
													}

												}

												@Override
												public void onFail(HttpException error, String msg) {
													error.printStackTrace();
													new NotificationScreen("获取擂台信息失败！").pushToGame();
												}
											});


										}

										@Override
										protected void onNo() {
											removeFromGame();

										}
									}.pushToGame();
								}

							}

						}
					}.pushToGame();

				}
			}


			break;

			case 16:
				//东郊大树

				break;

			case 17: // 强化武器
			{
				final Item item = Gmud.mc.getAttackItem();
				doCast(item, "武器");
			}
			break;
			case 18: // 强化护甲
			{
				final Item item = Gmud.mc.equipments[2];
				doCast(item, "护甲");
			}
			break;
			case 19: // 储物箱
				new ChestScreen().pushToGame();

				break;

			case 20: {
				ArrayList<String> ts = new ArrayList<>();

				switch(Gmud.paymentData.paymentStatus) {
					case PAID:
						ts.add("作者：非常感谢您的支持！");
						break;
					case TRIAL:
					case TRIAL2:
						ts.add("作者：您好，我是这个游戏的作者，请多指教。");
						ts.add(Gmud.mc.name + "：作者？你来干什么？");
						ts.add("作者：是这样的，其实我们这是一款收费游戏。请问您是否愿意花钱购买呢？");
						ts.add(Gmud.mc.name + "：什么，要钱？你要收多少钱？");
						ts.add("作者：这取决于您。您认为我们这款游戏值多少钱，游戏的价格就是多少钱。如果您认为这个游戏一分钱不值，那么这个游戏就是免费的。");
						ts.add(Gmud.mc.name + "：这样吗，让我想想......");

						new BegForPayMenuScreen(false).pushToGame();
						break;
					case ZERO:
						ts.add("作者：如果您对游戏有任何不满意的地方，欢迎向我反馈呦");
						break;
					default:
						break;

				}

				new EventScreen(ts, false).pushToGame();

			}
			break;

			case 104:

				break;

			case 99:

				if(Gmud.DEBUG) {
					ArrayList<String> sssss = new ArrayList<>();
					sssss.add("与NPC战斗");
					sssss.add("改变天赋");
					sssss.add("满级(经验100W,潜能10W,内力5W,体力1W)");
					sssss.add("参加武林大会");
					sssss.add("获得六块石板和20个升级糕");
					sssss.add("获得全部武器和武功秘籍");
					sssss.add("全部武功200级");
					sssss.add("输出数据（无用）");
					sssss.add("获得所有暗器");
					sssss.add("联机服务器测试");
					sssss.add("时间流逝一天");
					sssss.add("脚本执行测试");

					new GeneralMenuScreen(sssss, "测试选项：") {

						@Override
						public void onCancel() {
							getGame().popScreen();
						}

						@Override
						public void onClick(int i) {
							ArrayList<String> s = new ArrayList<>();
							switch(i) {
								case 0:
									for(Npc npc : Gmud.getNpc()) {
										s.add(npc.name);
									}

									new GeneralMenuScreen(s, "选择要与之战斗的NPC：") {
										@Override
										public void onCancel() {
											getGame().popScreen();
										}

										@Override
										public void onClick(int i) {
											BattleScreen.battle(i);
										}
									}.pushToGame();

									break;

								case 1:
									for(int in = 0; in < Gmud.getTalent_desc().size(); in++) {
										TalentDesc td = Gmud.getTalent_desc().valueAt(in);
										String desc = td.getDesc().substring(0, Math.min(td.getDesc().length(), 14));
										if(td.getDesc().equals(desc)) {
											s.add(td.getName() + "(" + desc + ")");
										} else {
											s.add(td.getName() + "(" + desc + "..)");
										}
									}

									new GeneralMenuScreen(s, "请选择你想要改变的天赋：") {
										@Override
										public void onCancel() {
											getGame().popScreen();
										}

										@Override
										public void onClick(int i) {
											Gmud.mc.setTalent(Gmud.getTalent_desc().keyAt(i));
											getGame().popScreen();
										}
									}.pushToGame();
									break;

								case 2:
									Gmud.mc.exp = 9999999;
									Gmud.mc.potential = 100000;
									Gmud.mc.gold = 10000000;
									Gmud.mc.maxfp = 9999;
									Gmud.mc.setFp(Gmud.mc.maxfp);
//									Gmud.mc.setMaxhp(9999);
									Gmud.mc.setHp(Gmud.mc.getMaxhp());
									Gmud.mc.setSp(Gmud.mc.getHp());
									Gmud.mc.agi = 150;
									Gmud.mc.str = 150;
									Gmud.mc.bon = 150;
									Gmud.mc.wxg = 150;
									Gmud.mc.refresh();
									getGame().popScreen();
									break;

								case 3:
									SBsParty();
									break;

								case 4:

									for(int j = 0; j < 6; j++) {
										Gmud.mc.give(99);
									}
									for(int j = 0; j < 20; j++) {
										Gmud.mc.give(9);
									}
									getGame().popScreen();
									break;

								case 5:
									final int books[] = new int[]{68, 69, 70, 71, 81, 82, 83, 84};
									for(int b : books) {
										Gmud.mc.give(b);
									}
									Gmud.mc.give_all_weapons();
									getGame().popScreen();
									break;
								case 6:
									for(int j = 0; j < Skill.getSkillCount(); j++) {
										Gmud.mc.learn(j, 200);
									}
									getGame().popScreen();
									break;
								case 7:

									IFileIO g = Game.getInstance().getFileIO();
									BufferedWriter out = null;
									try {
										out = new BufferedWriter(new OutputStreamWriter(g.writeFile("TalentDesc.json")));
										out.write(new Gson().toJson(Gmud.getTalent_desc()));
										new NotificationScreen("输出数据位于：" + ((BLGFileIO) g).externalStoragePath).replaceCurrent();
									} catch(IOException e) {
										e.printStackTrace();
									} finally {
										try {
											if(out != null) {
												out.close();
											}
										} catch(IOException e) {
											e.printStackTrace();
										}
									}
									break;
								case 8:

									for(ItemTemplate j : Gmud.getWp()) {
										if(j.getKind() == 5) {
											Logger.d("giving" + j.getName());
											Gmud.mc.give(j.getId());
										}
									}
									Game.getInstance().popScreen();
									break;
								case 9:

//							GmudHttp http = new GmudHttp(0, "正在获取数据");
//							RequestParams rp = new RequestParams();
//
//							rp.addBodyParameter("name", "gsc");
//
//							http.postLocked("http://yodbc.sinaapp.com/Admin/Index/rest",
//									rp,
//									new GmudRequestListener() {
//
//								@Override
//								public void onFail(HttpException error, String msg) {
//									new TalkingScreen(getGame(), msg, false).pushToGame();
//								}
//
//								@Override
//								public void onSucc(ResponseInfo<String> arg0) {
//									new TalkingScreen(getGame(), arg0.result, false).pushToGame();
//								}});
									break;
								case 10:
									this.removeFromGame();
									timeFlow(GameConstants.SECONDS_PER_DAY);
									new TalkingScreen("当前游戏天数为：" + Gmud.getGameDay()).pushToGame();
									break;
								case 11:
									JsCommon.test2();
									break;
							}
						}
					}.pushToGame();
				}
				break;
		}

	}

	/**
	 * @param item
	 */
	protected static void doCast(final Item item, String type) {

		final int CAST_LIMIT = 28;

		if(!Item.notNull(item)) {
			new TalkingScreen("你未装备" + type + "！").pushToGame();
		}
//		else if (item.enhanceable <= 0) {
//			new TalkingScreen("你的" + type + "已经无法再强化了！").pushToGame();
//		}
		else if(item.ex_level >= CAST_LIMIT) {
			new TalkingScreen("你的" + type + "已经强化到了满级！").pushToGame();
		} else {
			final int gold_cost = item.getCost() * ((item.ex_level + 1) * (item.ex_level + 1) - item.ex_level * item.ex_level) / 30 + 120 * (item.ex_level + 1);
			final int fail_rate = (item.ex_level / 3) * 3 + item.ex_level;
			String s = "确定要将你的" + item.getName() +
					"强化为" + "+" + (item.ex_level + 1) +
					"吗？将花费" + gold_cost + "金钱";


			//FIXME 符文碎片
			final int rune1 = item.ex_level / 2;
			final int rune2 = item.ex_level / 4;
			final int rune3 = item.ex_level / 8;
			if(item.ex_level >= 3 && (item.ex_level) % 3 == 0) {

				if(rune1 > 0) {
					s += String.format("，初级符文碎片%d个", rune1);
				}
				if(rune2 > 0) {
					s += String.format("，中级符文碎片%d个", rune2);
				}
				if(rune3 > 0) {
					s += String.format("，高级符文碎片%d个", rune3);
				}
			}

			s += "。成功率：" + (100 - fail_rate) + "%";


			CScreen scrn = new YesNoScreen(s) {

				@Override
				protected void onYes() {
					if(Gmud.mc.gold < gold_cost) {
						new TalkingScreen("你的金钱不足！").pushToGame();
					} else {
						final int itmid1 = Gmud.findItem("初级符文碎片").getId();
						final int itmid2 = Gmud.findItem("中级符文碎片").getId();
						final int itmid3 = Gmud.findItem("高级符文碎片").getId();
						if(
								(item.ex_level >= 3 && (item.ex_level) % 3 == 0) &&
										!(Gmud.mc.have(itmid1, rune1) &&
												Gmud.mc.have(itmid2, rune2) &&
												Gmud.mc.have(itmid3, rune3))
								) {
							new TalkingScreen("你的所需物品不足！").pushToGame();
						} else {
							Gmud.mc.gold -= gold_cost;
							//						Gmud.mc.potential -= pot_cost;

							new DoubiScreen(0.02f, 1, 50) {

								@Override
								public void onComplete() {

									if(Math.random() * 101 >= fail_rate) {
										item.ex_level++;
										item.enhanceable--;
										if(item.ex_level > 3 && (item.ex_level - 1) % 3 == 0) {

											Gmud.mc.drop(itmid1, rune1);
											Gmud.mc.drop(itmid2, rune2);
											Gmud.mc.drop(itmid3, rune3);

											final ArrayList<Rune> avr = item.getAvaliableRunes();
											Collections.shuffle(avr);
											ArrayList<String> s = new ArrayList<>();
											for(int i = 0; i < 3; i++) {
												s.add(avr.get(i).getStr() + ":" + avr.get(i).getDesc());
											}
											new GeneralMenuScreen(s, "请选择一项要添加的符文：") {

												@Override
												public void onCancel() {
												}

												@Override
												public void onClick(int i) {
													item.addRune(avr.get(i));
													new NotificationScreen("强化成功！").replaceCurrent();
												}
											}.pushToGame();

										} else {
											new NotificationScreen("强化成功！").pushToGame();
										}
									} else {
										new NotificationScreen("强化失败！").pushToGame();
									}

								}
							}.replaceCurrent();
						}
					}
				}

				@Override
				protected void onNo() {
					getGame().popScreen();
				}
			};

			scrn.pushToGame();
		}
	}


	public static void doMarriage(SaveData sd) {
		Game.getData().spouse = sd.mc;
		Game.getData().spouseid = sd.getObjectId();
		Game.getData().story.passSimpleStory(GameStory.SIMPLESTORY_MARRIAGE);

		if(Gmud.mc.getHp() > Gmud.mc.getMaxhp()) {
			Gmud.mc.setHp(Gmud.mc.getMaxhp());
		}
		if(Gmud.mc.getSp() > Gmud.mc.getHp()) {
			Gmud.mc.setSp(Gmud.mc.getHp());
		}
	}
}
